package com.designpattern.singleton;

/**
 * @author liyanhao
 * @Date 2023-02-06 20:45
 * 静态内部类
 * 1 使用类的装载机制来保证初始化实例时时只有一个线程
 * 2 静态内部类方式在Singleton类被装载是并不会立即实例化 而是在需要实例化是
 * 调用getInstance 时才会装载SingletonInstance类，从而完成Singleton05的实例化
 * 3 类的静态熟悉只会在第一次加载类的时候初始化 所以这里jvm帮助我们保证了线程的安全性
 * 在类进行初始化时，别的线程无法进入的
 * 4 避免了线程不安全 利用静态内部类特点实现延迟加载 效率高
 *
 *
 */
public class SingletonTest05 {
    public static void main(String[] args) {

    }
}

class Singleton05 {
    private static volatile Singleton05 instance;

    private Singleton05() {
    }

    //写一个静态内部类 该类中只有个静态属性Singleton05
    private static class SingletonInstance{
        private static final Singleton05 instance = new Singleton05();
    }

    //提供一个静态的公共方法 直接返回SingletonInstance.instance
    public static synchronized Singleton05 getInstance() {
        return SingletonInstance.instance;
    }
}
